package com.itheima.controller;

import com.itheima.anno.Log;
import com.itheima.pojo.Dept;
import com.itheima.pojo.Result;
import com.itheima.service.DeptService;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.slf4j.ILoggerFactory;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Slf4j
@RequestMapping("/depts")//公共路径：/depts
@RestController
public class DeptController {

    //private static final Logger log = LoggerFactory.getLogger(DeptController.class);固定的

    @Autowired
    private DeptService deptService;

    //    @RequestMapping(value = "/depts",method = RequestMethod.GET
    @GetMapping
    public Result list() {
        log.info("查询全部部门数据");//System.out.println("查询全部部门数据");
        List<Dept> deptList = deptService.findAll();
        return Result.success(deptList);
    }

//    删除部门-方式一（不推荐）：
//    @DeleteMapping("/depts")
//    public Result delete(HttpServletRequest request) {
//        String idStr = request.getParameter("id");
//        int id = Integer.parseInt(idStr);
//        System.out.println("删除部门:  " + id);
//        return Result.success();
//    }

    //    删除部门-方式二（不推荐）：
//    @DeleteMapping("/depts")
//    public Result delete(@RequestParam("id") Integer deptId) {
//        System.out.println("删除部门:  " + deptId);
//        return Result.success();
//    }

    //    删除部门-方式三（推荐）：
    //如果请求参数名与形参变量名相同，直接定义方法形参即可接受
    @Log
    @DeleteMapping
    public Result delete(Integer id) {
        log.info("删除部门: {}", id);
        //System.out.println("删除部门:  " + id);
        deptService.deleteById(id);
        return Result.success();
    }

    //    新增部门：
    //这个传了的是json数据，所以要使用@RequestBody注解
    @Log
    @PostMapping
    public Result add(@RequestBody Dept dept) {
        log.info("新增部门:  {}", dept);
        //System.out.println("新增部门:  " + dept);
        deptService.add(dept);
        return Result.success();
    }

//    @GetMapping("/{id}")
//    public Result getInfo(@PathVariable("id")Integer deptId){
//        System.out.println("根据查询部门信息:  " + deptId);
//        Dept dept = deptService.findById(deptId);
//        return Result.success(dept);
//    }

    //如果请求参数名与形参变量名相同，直接定义方法形参即可接受
    //这个是接受路径参数的
    @GetMapping("/{id}")
    public Result getInfo(@PathVariable Integer id) {
        //System.out.println("根据id查询部门信息:  " + id);
        log.info("根据id查询部门信息:  {}", id);
        Dept dept = deptService.getById(id);
        return Result.success(dept);
    }

    //根据id修改部门信息
    @Log
    @PutMapping
    public Result update(@RequestBody Dept dept) {
        //System.out.println("修改部门信息:  " + dept);
        log.info("修改部门信息:  {}", dept);
        deptService.update(dept);
        return Result.success();
    }
}
